perm filename SUBX.F4[P11,LCS] blob
sn#369187 filedate 1979-01-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 C***** THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS
C00005 ENDMK
C⊗;
C***** THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS
SUBROUTINE SUBR
COMMON /P/P(1) /PL/PL(1) /INS/ INST(27),BG(60)
COMMON INUM,IPAR,CNT(27),BT,IREST,DF,DUR(27)
C INUM=INST# IPAR=PARAM#
C BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C IF IREST IS <0, THAT NOTE WILL BE A REST.
C INST=INST. NAME, BG=INSTS' BEGIN TIMES.
C NOTE #S IN SUBROUTINE: (1-84) C4=37 FS4=43 C5=49 ETC.
C F1=86 F15=100 (NO F16!)
C CALL SUBROUTINE FROM ANY PARAMETER WHERE THE CALLING PARAMETER
C AND THE IMMEDITELY PRECEDING PARAMETER ARE UNUSED BY YOUR INSTR.
C P3 CAN BE NOTES OR NUMBS.
X=P(3)
IF(PL(3).EQ.1)GO TO 1
X=IFIX(X)
C FOR RAND NOTES TO LOCK ON NOTE NUMBERS.
CC X=30.8677*2**(X/12)
X=15.43385*2**(X/12)
C X=FREQ. IN HZ. BASED ON NOTE # IN P3. NUMB. ABOVE IS B, OCT↓ LOWEST B.
PL(3)=1.
C THIS CAUSES FREQ. NUM TO PRINT INSTEAD OF LITERAL CHARACTERS.
1 Y=IFIX(P(IPAR-1))
Z=IFIX(P(IPAR))
P(3)=X*2**(Y/Z)
2 IF(X.EQ.0)IREST=-1
C IPAR (Z) IS THE CALLING PARAMETER. IPAR-1 (Y) THE PREVIOUS PARAM.
C THE NUMBER IN P(IPAR)=# OF DIVISIONS OF THE OCTAVE.
C THE NUMBER IN P(IPAR-1)=CHROMATIC STEP IN THAT DIV.
RETURN
END
C TYPICAL INPUT FOR MICROTONE SUBROUTINE.
C TOOT ; P2 .3; P3 A3;
C P4 .7;
C P5 F2; P6 F4;
C P18 NUM/0/1/2/3/4/5/6/7/8/9/FINE;
C P19 9 SUBR; END; OCTAVE IS DIVIDED INTO 9 PARTS.
C < ASSUMES P18 AND P19 ARE NOT USED BY YOUR INSTRUMENT.